package edu.northwestern.cbits.purple_robot_manager.snapshots;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.json.JSONArray;
import org.json.JSONException;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.RobotContentProvider;
import edu.northwestern.cbits.purple_robot_manager.logging.LogManager;
public class SnapshotsActivity extends ActionBarActivity
{
@SuppressLint("SimpleDateFormat")
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.layout_snapshots_activity);
this.getSupportActionBar().setTitle(R.string.title_snapshots);
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
protected void onResume()
{
super.onResume();
this.refresh();
}
public void refresh()
{
final SnapshotsActivity me = this;
ListView listView = (ListView) this.findViewById(R.id.list_snapshots);
final SimpleDateFormat sdf = new SimpleDateFormat("MMM d, H:mm:ss");
Cursor c = this.getContentResolver().query(RobotContentProvider.SNAPSHOTS, null, null, null, "recorded DESC");
final CursorAdapter adapter = new CursorAdapter(this, c, true)
{
public void bindView(View view, Context context, Cursor cursor)
{
final String source = cursor.getString(cursor.getColumnIndex("source"));
final String audioFile = cursor.getString(cursor.getColumnIndex("audio_file"));
ImageView micIcon = (ImageView) view.findViewById(R.id.mic_icon);
if (audioFile != null)
micIcon.setVisibility(View.VISIBLE);
else
micIcon.setVisibility(View.GONE);
Date date = new Date(cursor.getLong(cursor.getColumnIndex("recorded")));
TextView dateLabel = (TextView) view.findViewById(R.id.date_label);
dateLabel.setText(sdf.format(date));
TextView sourceLabel = (TextView) view.findViewById(R.id.source_label);
try
{
JSONArray array = new JSONArray(cursor.getString(cursor.getColumnIndex("value")));
if (array.length() == 1)
sourceLabel.setText(me.getString(R.string.snapshot_single_desc, source));
else
sourceLabel.setText(me.getString(R.string.snapshot_desc, source, array.length()));
}
catch (JSONException e)
{
LogManager.getInstance(me).logException(e);
sourceLabel.setText(source);
}
}
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) me.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_snapshot_row, null);
this.bindView(view, context, cursor);
return view;
}
};
listView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> listView, View view1, int which, long id)
{
Intent intent = new Intent(me, SnapshotActivity.class);
intent.putExtra("id", id);
me.startActivity(intent);
}
});
listView.setAdapter(adapter);
}
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.menu_snapshot_activity, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
final SnapshotsActivity me = this;
int itemId = item.getItemId();
if (itemId == android.R.id.home)
this.finish();
else if (itemId == R.id.menu_snapshot)
{
String label = this.getString(R.string.snapshot_user_initiated);
try
{
SnapshotManager.getInstance(this).takeSnapshot(this, label, new Runnable()
{
public void run()
{
me.runOnUiThread(new Runnable()
{
public void run()
{
me.refresh();
}
});
}
});
}
catch (EmptySnapshotException e)
{
Toast.makeText(this, R.string.empty_snapshot_error, Toast.LENGTH_SHORT).show();
}
}
return true;
}
}